﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SistemaLib.Entidades;
using SistemaLib.Gestores;
using Coolite.Ext.Web;

namespace SistemaWeb.Editores
{
    public partial class EdEstimaciones : System.Web.UI.UserControl
    {
        public int IdTarea 
        { 
            get { return Convert.ToInt32(Session["idTarea"]); }
            set { Session["idTarea"] = value; }
        }
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

            }
        }

        public void CargarCampos(int idTarea)
        {
            IdTarea = idTarea;
            Tarea tarea = GestorTareas.CargarTareaPorId(idTarea);
            txtTiempoNombre.Text = txtCostoNombre.Text = tarea.Nombre;
            txtTiempoId.Text = txtCostoId.Text = tarea.Id.ToString();

            EstimacionCosto ec = GestorEstimacionCostos.CargarEstimacionCostos(idTarea);
            EstimacionTiempo et = GestorEstimacionTiempo.CargarEstimacionTiempo(idTarea);

            txtTiempo.Text = et.Id != 0 ? String.Format("{0:0.##}", et.HorasEstimadas) : String.Format("{0:0.##}", GestorTareas.EstimarTiempoAproximado(IdTarea));
            txtCosto.Text = ec.Id != 0 ? String.Format("{0:0.##}", ec.CostoEstimado) : String.Format("{0:0.##}", GestorTareas.EstimarCostoAproximado(IdTarea));

            popupEditor.Show();
        }

        protected void Guardar(object sender, AjaxEventArgs e)
        {
            try
            {
                /** VALIDACIONES ***/

                if (txtCosto.Text == "")
                    throw new Exception("El campo 'Costo' no puede estar vacio");
                if (txtTiempo.Text == "")
                    throw new Exception("El campo 'Tiempo' no puede estar vacio");                
                decimal horas;
                if(!Decimal.TryParse(txtTiempo.Text, out horas))
                    throw new Exception("El campo 'Tiempo' debe ser numerico");
                if(horas < 0)
                    throw new Exception("El campo 'Tiempo' debe ser positivo");
                decimal costo;
                if(!Decimal.TryParse(txtCosto.Text, out costo))
                    throw new Exception("El campo 'Costo' debe ser numerico");
                if(costo < 0)
                    throw new Exception("El campo 'Costo' debe ser positivo");


                /*** Guarda las estimaciones ***/

                Tarea tar = GestorTareas.CargarTareaPorId(IdTarea);
                EstimacionCosto ec = GestorEstimacionCostos.CargarEstimacionCostos(IdTarea);
                EstimacionTiempo et = GestorEstimacionTiempo.CargarEstimacionTiempo(IdTarea);

                ec.IdTarea = IdTarea;
                ec.CostoEstimado = costo;
                GestorEstimacionCostos.Guardar(ec);

                et.IdTarea = IdTarea;
                et.HorasEstimadas = horas;
                GestorEstimacionTiempo.Guardar(et);

                Ext.Msg.Show(new MessageBox.Config
                {
                    Title = "Estimaciones Registradas",
                    Message = "Las Estimaciones de Costos y Tiempos han sido guardadas correctamente.",
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO
                });

                popupEditor.Hide();

            }
            catch (Exception ex)
            {
                Ext.Msg.Show(new MessageBox.Config
                {
                    Title = "No se pudo realizar la Asignacion",
                    Message = ex.Message,
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR
                });
            }           
            
        }
    }
}